/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package net.javahispano.nettools.cliente;


import java.net.*;
import java.io.*;
import java.util.logging.Level;
import java.util.logging.Logger;



/**
 *
 * @author Usuario
 */
public class JScanner2 {
     public Informable2 cliente;
 InetAddress h=null;
    String host;
  private String response;
  private int PideParar=1;
Object[]columna1;

 public JScanner2(Informable2 cliente){// Conexiones conexion) {
    this.cliente = cliente;
   // this.host = campoHost;
  }



  public void EstableceConexiones (String campoHost,String campoResuelto, int inicio,int fin,int start){
   System.out.println("Parte LOOOOGICAAAAAA ARRANCADA campoHost"+campoHost + "campoResuelto "+ campoResuelto+ " inicio "+inicio+ " fin "+fin+" start "+ start);

      try {
            try {
                host = InetAddress.getByName(campoHost).getHostAddress();
            } catch (UnknownHostException ex) {
                System.out.println("Salta La excepción");
                Logger.getLogger(JScanner2.class.getName()).log(Level.SEVERE, null, ex);
            }
            String resolve = InetAddress.getByName(campoHost).getCanonicalHostName();
            campoResuelto=resolve;
            h = InetAddress.getByName(host);
         //   campoResuelto.setText(resolve);
          //  h = InetAddress.getByName(host);

            FabricaPuertos fabrica=new FabricaPuertos(h,inicio,fin);

            for (; start <= 400; start++) {
                FastThread t = new FastThread(fabrica);
                System.out.println("Hilo de ejecucionnnnnnnn11111----->>>>>" + fabrica.SiguientePuerto + fabrica.PuertoInicio);
                t.start();
            }
        } catch (UnknownHostException ex) {
            Logger.getLogger(JScanner2.class.getName()).log(Level.SEVERE, null, ex);
        }
      
      
  }
/*
  //reinicia Valores
  public void Restablecer valores(){

  }*/


    /**
     * @return the PideParar
     */
    public int getPideParar() {
        return PideParar;
    }

    /**
     * @param PideParar the PideParar to set
     */
    public void setPideParar(int PideParar) {
        this.PideParar = PideParar;
    }

    /**
     * @return the response
     */
    public String getResponse() {
        return response;
    }

    /**
     * @param response the response to set
     */
    public void setResponse(String response) {
        this.response = response;
    }


class FabricaPuertos
{
  InetAddress _host=null;
  int PuertoInicio=-1;
  int PuertoFin=-1;
  int SiguientePuerto=-1;
  public FabricaPuertos(InetAddress host,int inicio,int fin)
      {
        this._host=host;
        this.SiguientePuerto=inicio++;
        this.PuertoFin=fin;

      }

      public boolean hasMoreElements()
      {
        return (SiguientePuerto<=PuertoFin);
      }

      public Object nextElement()
      {
        return new JPuertos(_host,SiguientePuerto++);

      }
}

    //Clase que gestiona los puertos para el escaneo

    class JPuertos
    {
      InetAddress _host=null;
      int puerto=-1;

      public JPuertos(InetAddress host, int port)
      {
        this._host=host;
        this.puerto=port;

      }

      void StartScanPorts()
      {

        try
        {
          Socket escucha=new Socket(_host,puerto);
          if(escucha.isConnected())
          {
            archivo_aceptarSuperScan(puerto);
            escucha.close();
          }

        }
        catch(Exception e)
        {

        }
      }
      void StartScanTrojans()
      {
        try
        {
          Socket escucha=new Socket(_host,puerto);
          if(escucha.isConnected())
          {
            archivo_troyano(puerto);
            escucha.close();
          }
        }
        catch(Exception event){};
      }
    }


    public void archivo_aceptarSuperScan(int sock) throws IOException
    {
        System.out.println("Estoy dentro Funcion SuperScannn");
       //FileReader fichero = new FileReader("/net/javahispano/nettools/cliente.scanner/superscan.txt");
       //FileReader fichero = new FileReader("/./scanner/superscan.txt");

         //FileReader fichero2 = new FileReader("scanner/puertos_scanner.txt");
       //  FileReader fichero = new FileReader("C:/superscan.txt");
        FileReader fichero = new FileReader("/superscan.txt");
        FileReader fichero2 = new FileReader("/puertos_scanner.txt");
        BufferedReader br = new BufferedReader(fichero);
        BufferedReader br2 = new BufferedReader(fichero2);
        String protocol;
        String puerto=null;
        String compara = String.valueOf(sock);

  //--------->>Cambio Clase      DefaultTableModel modelo = (DefaultTableModel) tabla.getModel();

        while ( (protocol = br.readLine()) != null && (puerto = br2.readLine()) != null) {
             // System.out.println("Columnassssss1111111111111---------->>>>>>>>>Puerto abierto"+protocol+"  "+ puerto);
            if (puerto.compareTo(compara) == 0)
          {
            Object[] columna={puerto,protocol,"open"};
              System.out.println("Columnassssss---------->>>>>>>>>Puerto abierto : "+ columna[0].toString()+ columna[1].toString());
            //    columna1[0]=columna;
                System.out.println("********Antes de enviar intefaz grafica");
                cliente.mostrar(columna);
                System.out.println("********FIN de enviar intefaz grafica");
              //--------->>Cambio Clase         modelo.addRow(columna);
            //tabla.sizeColumnsToFit(-1);
          }

        }
System.out.println("FINALLLLLLLLLLLLLLLLL---------->>>>>>>>>Puerto abierto"+protocol+"  "+ puerto);
        fichero.close();
        fichero2.close();

      }

      public void archivo_troyano(int sock) throws IOException {

      //FileReader fichero = new FileReader("C:/trojans.txt");
      FileReader fichero = new FileReader("/trojans.txt");
      FileReader fichero2 = new FileReader("/puertos_troyanos.txt");
      BufferedReader br = new BufferedReader(fichero);
      BufferedReader br2 = new BufferedReader(fichero2);
      String troyano;
      String puerto;
      String compara = String.valueOf(sock);
      String lista = "";
//--------->>Cambio Clase       DefaultTableModel modelo = (DefaultTableModel) tabla.getModel();
      while ( (troyano = br.readLine()) != null && (puerto = br2.readLine()) != null) {
        if (puerto.compareTo(compara) == 0)
        {
          Object[] columna={puerto,troyano,"open"};
  //--------->>Cambio Clase        modelo.addRow(columna);
          cliente.mostrar(columna);
        }

      }
      fichero.close();
      fichero2.close();
    }


class FastThread extends Thread implements Runnable
{
  FabricaPuertos _puertos=null;

  public FastThread(FabricaPuertos puertos)
  {
    this._puertos=puertos;
  }
  public void run()
  {

    JPuertos ports = null;
    boolean parar = false;
    while (!parar && PideParar!=0) {
      ports = null;
      synchronized (_puertos) {
          cliente.informaSobreElProgreso(_puertos.SiguientePuerto);
 //--------->>Cambio Clase       progreso.setValue(_puertos.SiguientePuerto);
        if (!_puertos.hasMoreElements()) {
          parar = true;
        cliente.finalscanner(parar);

          return;


        }
        ports = (JPuertos) _puertos.nextElement();

      }
      if(null!=ports)
      {
        if(response.compareTo("puertos")==0)
             ports.StartScanPorts();
             if(response.compareTo("troyanos")==0)
               ports.StartScanTrojans();
      }

    }
  }
}

  }
//}

